import gradio as gr
import cv2
import numpy as np
from tabulate import tabulate 

params_path = 'model_params.pth'  # 定义保存模型参数的文件路径
params_size = os.path.getsize(params_path)  # 获取模型参数文件的大小，用于打印文件信息

loaded_params = torch.load(params_path)  # 使用torch.load函数从文件中载入模型参数
loaded_model_params = Perceptron()  # 实例化一个新的感知机模型，用于加载模型参数
loaded_model_params.load_state_dict(loaded_params)  # 使用load_state_dict函数将载入的参数加载到模型中
loaded_model_params.eval()  # 将模型设置为评估模式，关闭梯度计算和批归一化等操作

# 定义预测函数，这个函数将用于Gradio接口进行预测
def predict(x):
    x_infer = cv2.resize(x,(28,28))
    x_infer = np.expand_dims(x_infer , axis=0)
    y_infer = loaded_model_params.predict(x_infer)
    y_max = np.argmax(y_infer)
    return str(y_max)
interface = gr.Interface(predict, 
                         inputs='sketchpad', 
                         outputs='text',
                         live=True)
# 启动Gradio接口，用户可以通过这个接口进行交互
interface.launch()
